// noinspection JSUnresolvedReference
/**
* Field Google Map
*/
/* global jQuery, document, redux_change, redux, google */
(function ( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.google_maps = redux.field_objects.google_maps || {};
/* LIBRARY INIT */
redux.field_objects.google_maps.init = function ( selector ) {
if ( ! selector ) {
selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' );
}
$( selector ).each(
function ( i ) {
let delayRender;
const el = $( this );
let parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
// Check for delay render, which is useful for calling a map
// render after JavaScript load.
delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) );
// API Key button.
redux.field_objects.google_maps.clickHandler( el );
// Init our maps.
redux.field_objects.google_maps.initMap( el, i, delayRender );
}
);
};
/* INIT MAP FUNCTION */
redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) {
let delayed;
let scrollWheel;
let streetView;
let mapType;
let address;
let defLat;
let defLong;
let defaultZoom;
let mapOptions;
let geocoder;
let g_autoComplete;
let g_LatLng;
let g_map;
let noLatLng = false;
// Pull the map class.
const mapClass = el.find( '.redux_framework_google_maps' );
const containerID = mapClass.attr( 'id' );
const autocomplete = containerID + '_autocomplete';
const canvas = containerID + '_map_canvas';
const canvasId = $( '#' + canvas );
const latitude = containerID + '_latitude';
const longitude = containerID + '_longitude';
// Add map index to data attr.
// Why, say we want to use delay_render,
// and want to init the map later on.
// You'd need the index number in the
// event of multiple map instances.
// This allows one to retrieve it
// later.
$( mapClass ).attr( 'data-idx', idx );
if ( true === delayRender ) {
return;
}
// Map has been rendered, no need to process again.
if ( $( '#' + containerID ).hasClass( 'rendered' ) ) {
return;
}
// If a map is set to delay render and has been initiated
// from another scrip, add the 'render' class so rendering
// does not occur.
// It messes things up.
delayed = Boolean( mapClass.data( 'delay-render' ) );
if ( true === delayed ) {
mapClass.addClass( 'rendered' );
}
// Create the autocomplete object, restricting the search
// to geographical location types.
g_autoComplete = await google.maps.importLibrary( 'places' );
g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} );
// Data bindings.
scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) );
streetView = Boolean( mapClass.data( 'street-view' ) );
mapType = Boolean( mapClass.data( 'map-type' ) );
address = mapClass.data( 'address' );
address = decodeURIComponent( address );
address = address.trim();
// Set default Lat/lng.
defLat = canvasId.data( 'default-lat' );
defLong = canvasId.data( 'default-long' );
defaultZoom = canvasId.data( 'default-zoom' );
// Eval whether to set maps based on lat/lng or address.
if ( '' !== address ) {
if ( '' === defLat || '' === defLong ) {
noLatLng = true;
}
} else {
noLatLng = false;
}
// Can't have empty values, or the map API will complain.
// Set default for the middle of the United States.
defLat = defLat ? defLat : 39.11676722061108;
defLong = defLong ? defLong : -100.47761000000003;
if ( noLatLng ) {
// If displaying a map based on an address.
geocoder = new google.maps.Geocoder();
// Set up Geocode and pass address.
geocoder.geocode(
{'address': address},
function ( results, status ) {
let latitude;
let longitude;
// Function results.
if ( status === google.maps.GeocoderStatus.OK ) {
// A good address was passed.
g_LatLng = results[0].geometry.location;
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom,
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
// Get and set lat/long data.
latitude = el.find( '#' + containerID + '_latitude' );
latitude.val( results[0].geometry.location.lat() );
longitude = el.find( '#' + containerID + '_longitude' );
longitude.val( results[0].geometry.location.lng() );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
} else {
// No data found, alert the user.
alert( 'Geocode was not successful for the following reason: ' + status );
}
}
);
} else {
// If displaying map based on an lat/lng.
g_LatLng = new google.maps.LatLng( defLat, defLong );
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom, // Start off far unless an item is selected, set by php.
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create the map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
}
};
redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) {
let markerTooltip;
let infoWindow;
let g_marker;
let geoAlert = mapClass.data( 'geo-alert' );
// Get HTML.
const input = document.getElementById( autocomplete );
// Set objects into the map.
g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input );
// Bind objects to the map.
g_autoComplete = new google.maps.places.Autocomplete( input );
g_autoComplete.bindTo( 'bounds', g_map );
// Get the marker tooltip data.
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Create infoWindow.
infoWindow = new google.maps.InfoWindow();
// Create marker.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
draggable: true,
title: markerTooltip,
animation: google.maps.Animation.DROP
}
);
geoAlert = decodeURIComponent( geoAlert );
// Place change.
google.maps.event.addListener(
g_autoComplete,
'place_changed',
function () {
let place;
let address;
let markerTooltip;
infoWindow.close();
// Get place data.
place = g_autoComplete.getPlace();
// Display alert if something went wrong.
if ( ! place.geometry ) {
window.alert( geoAlert );
return;
}
console.log( place.geometry.viewport );
// If the place has a geometry, then present it on a map.
if ( place.geometry.viewport ) {
g_map.fitBounds( place.geometry.viewport );
} else {
g_map.setCenter( place.geometry.location );
g_map.setZoom( 17 ); // Why 17? Because it looks good.
}
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Set the marker icon.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
title: markerTooltip,
clickable: true,
draggable: true,
animation: google.maps.Animation.DROP
}
);
// Set marker position and display.
g_marker.setPosition( place.geometry.location );
g_marker.setVisible( true );
// Form array of address components.
address = '';
if ( place.address_components ) {
address = [( place.address_components[0] && place.address_components[0].short_name || '' ),
( place.address_components[1] && place.address_components[1].short_name || '' ),
( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' );
}
// Set the default marker info window with address data.
infoWindow.setContent( '
' + place.name + ' ' + address );
infoWindow.open( g_map, g_marker );
// Run Geolocation.
redux.field_objects.google_maps.geoLocate( g_autoComplete );
// Fill in address inputs.
redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete );
}
);
// Marker drag.
google.maps.event.addListener(
g_marker,
'drag',
function ( event ) {
document.getElementById( latitude ).value = event.latLng.lat();
document.getElementById( longitude ).value = event.latLng.lng();
}
);
// End marker drag.
google.maps.event.addListener(
g_marker,
'dragend',
function () {
redux_change( el.find( '.redux_framework_google_maps' ) );
}
);
// Zoom Changed.
g_map.addListener(
'zoom_changed',
function () {
el.find( '.google_m_zoom_input' ).val( g_map.getZoom() );
}
);
// Marker Info Window.
infoWindow = new google.maps.InfoWindow();
google.maps.event.addListener(
g_marker,
'click',
function () {
const marker_info = containerID + '_marker_info';
const infoValue = document.getElementById( marker_info ).value;
if ( '' !== infoValue ) {
infoWindow.setContent( infoValue );
infoWindow.open( g_map, g_marker );
}
}
);
};
/* FILL IN ADDRESS FUNCTION */
redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) {
// Set variables.
const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' );
// What if someone only wants city, or state, ect...
// gotta do it this way to check for the address!
// Need to check each of the returned components to see what is returned.
const componentForm = {
street_number: 'short_name',
route: 'long_name',
locality: 'long_name',
administrative_area_level_1: 'short_name',
country: 'long_name',
postal_code: 'short_name'
};
// Get the place details from the autocomplete object.
const place = g_autoComplete.getPlace();
let component;
let i;
let addressType;
let _d_addressType;
let val;
let len;
document.getElementById( latitude ).value = place.geometry.location.lat();
document.getElementById( longitude ).value = place.geometry.location.lng();
for ( component in componentForm ) {
if ( componentForm.hasOwnProperty( component ) ) {
// Push in the dynamic form element ID again.
component = containerID + '_' + component;
// Assign to proper place.
document.getElementById( component ).value = '';
document.getElementById( component ).disabled = false;
}
}
// Get each component of the address from the place details
// and fill the corresponding field on the form.
len = place.address_components.length;
for ( i = 0; i < len; i += 1 ) {
addressType = place.address_components[i].types[0];
if ( componentForm[addressType] ) {
// Push in the dynamic form element ID again.
_d_addressType = containerID + '_' + addressType;
// Get the original.
val = place.address_components[i][componentForm[addressType]];
// Assign to proper place.
document.getElementById( _d_addressType ).value = val;
}
}
};
redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) {
if ( navigator.geolocation ) {
navigator.geolocation.getCurrentPosition(
function ( position ) {
const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude );
const circle = new google.maps.Circle(
{
center: geolocation,
radius: position.coords.accuracy
}
);
g_autoComplete.setBounds( circle.getBounds() );
}
);
}
};
/* API BUTTON CLICK HANDLER */
redux.field_objects.google_maps.clickHandler = function ( el ) {
// Find the API Key button and react on click.
el.find( '.google_m_api_key_button' ).on(
'click',
function () {
// Find message wrapper.
const wrapper = el.find( '.google_m_api_key_wrapper' );
if ( wrapper.is( ':visible' ) ) {
// If the wrapper is visible, close it.
wrapper.slideUp(
'fast',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
} else {
// If the wrapper is visible, open it.
wrapper.slideDown(
'medium',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
}
}
);
el.find( '.google_m_autocomplete' ).on(
'keypress',
function ( e ) {
if ( 13 === e.keyCode ) {
e.preventDefault();
}
}
);
// Auto select autocomplete contents,
// since Google doesn't do this inherently.
el.find( '.google_m_autocomplete' ).on(
'click',
function ( e ) {
$( this ).trigger( 'focus' );
$( this ).trigger( 'select' );
e.preventDefault();
}
);
};
} )( jQuery );
Tìm Kiếm Cổng Game Uy Tín Nhất Hiện Nay Để Chơi Sòng Bạc Trực Tuyến – NHẬP NGAY! – Orchid Group Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Tìm hiểu về cách tìm kiếm cổng game uy tín nhất để chơi sòng bạc trực tuyến
Tìm hiểu về cách tìm kiếm cổng game uy tín nhất để chơi sòng bạc trực tuyến tại Việt Nam không phải là việc dễ dàng. Tuy nhiên, bằng cách theo đuổi một số bước cơ bản, bạn có thể giảm thiểu rủi ro và tăng cường trải nghiệm tốt hơn.
Lần thứ nhất, hãy tìm kiếm các trang web uy tín và được đánh giá cao trong ngành casino trực tuyến. Bạn có thể tìm thấy những thông tin này trên các trang web tin tức hoặc cộng đồng người chơi.
Sau đó, hãy kiểm tra xem các trang web đó có phù hợp với quy định và pháp luật của Việt Nam không. Nhiều trang web casino trực tuyến có thể không cho phép người chơi từ một số quốc gia, bao gồm Việt Nam.
Bạn nên tìm kiếm các trang web cho phép thanh toán bằng các phương thức thanh toán phổ biến tại Việt Nam, chẳng hạn như thẻ tín dụng hoặc ví điện tử. Điều này sẽ giúp bạn tiết kiệm thời gian và giảm rủi ro trong quá trình giao dịch.
Hãy xem xét các trang web có chất lượng dịch vụ khách hàng tốt hơn. Điều này có thể bao gồm hỗ trợ trực tuyến 24/7, chính sách hoàn tiền tốt và một trải nghiệm người chơi tốt hơn.
Bạn nên tìm hiểu xem các trang web đó có bảo mật thông tin cá nhân và tiền tệ của bạn không. Hãy tìm kiếm các trang web sử dụng tiêu chuẩn bảo mật SSL và cung cấp thông tin chi tiết về cách họ bảo vệ thông tin của bạn.
Sau khi chọn một số trang web phù hợp, hãy đăng ký và thử nghiệm một số trò chơi miễn phí để kiểm tra xem chúng hoạt động như thể hay không. Điều này sẽ giúp bạn có được cảm nhận tốt hơn về trải nghiệm của mình trên từng trang web.
Và cuối cùng, hãy luôn chơi với trách nhiệm và giữ sự kiểm soát trong suốt quá trình chơi. Điều này sẽ giúp bạn giảm thiểu rủi ro và tăng thu nhập trong suốt thời gian bạn chơi sòng bạc trực tuyến tại Việt Nam.
Những yếu tố cần xem xét khi tìm kiếm cổng game uy tín để chơi sòng bạc trực tuyến
Tìm kiếm một cổng game uy tín để chơi sòng bạc trực tuyến tại Việt Nam? Hãy lưu ý những yếu tố sau:
1. Đảm bảo rằng cổng game đó được cấp phép bởi các chính phủ địa phương hoặc các tổ chức kiểm soát toàn cầu.
2. Xem xét các bài viết và đánh giá của người chơi khác để đánh giá uy tín của cổng game.
3. Kiểm tra xem cổng game có cung cấp các chứng nhận bảo mật hoặc không.
4. Nhận thức rõ về các loại game mà cổng game đó hỗ trợ.
5. Xem xét chất lượng và tốc độ của phần mềm sử dụng trên cổng game.
6. Kiểm tra xem cổng game có hỗ trợ các phương thức thanh toán phổ biến tại Việt Nam không.
7. Liên hệ với trung tâm trợ giúp của cổng game để kiểm tra sự nhanh chóng và chuyên nghiệp của dịch vụ hỗ trợ.
8. Luôn giữ sự trách nhiệm với việc chơi game và không vượt quá giới hạn tài chính của mình.
Lời khuyên cho người chơi trực tuyến khi tìm kiếm cổng game uy tín để chơi sòng bạc
Tìm kiếm trung thành một cổng game uy tín để chơi sòng bạc online tại Việt Nam? Hãy lưu ý những lời khuyên sau: 1. Xác minh đảm bảo chất lượng dịch vụ của casino online qua các bài viết và đánh giá của người chơi khách quan.
2. Kiểm tra xem cổng game đó đang hoạt động hợp pháp tại Việt Nam và được cấp phép bởi các tổ chức chứng nhận uy tín.
3. Chọn các trang web cho phép giao dịch bằng tiền tệ được sử dụng phổ biến tại Việt Nam như VND.
4. Tránh các trang web yêu cầu cung cấp thông tin cá nhân quá nhiều hoặc không cần thiết.
5. Tìm hiểu về các chính sách bảo mật và bảo vệ thông tin cá nhân của các cổng game.
6. Liên hệ với dịch vụ trực tuyến hoặc trung tâm trợ giúp của cổng game để xác minh tính bảo mật và chuyên nghiệp.
7. Hãy cẩn thận với các trang web tung một lượng lớn quà tặng và chiếc thưởng, vì chúng có thể là mối đe dọa cho tính bảo mật của bạn.
8. Đặt cược với tầm nhìn bình dân, không vượt quá khả năng chi trả của mình và luôn chơi để nghiền thục, không chơi để chiến thắng.
Cách chọn một cổng game uy tín để chơi sòng bạc trực tuyến an toàn và thú vị
Tìm kiếm một cổng game uy tín là điều cần thiết để chơi sòng bạc trực tuyến an toàn và thú vị tại Việt Nam. Hãy lựa chọn một trang web đã được xác thực bởi các chứng nhận uy tín. Xem xét các đánh giá và bình luận của người chơi khác để đảm bảo tính linh hoạt và hỗ trợ trực tuyến 24/7. Hãy kiểm tra xem cổng game đó có cung cấp các tính năng bảo mật, chẳng hạn như chứng nhận SSL và chính sách riêng tư, để bảo vệ thông tin cá nhân và thanh toán của bạn. Cũng hãy chú ý đến chất lượng và số lượng các trò chơi mà cổng game đó cung cấp. Những trò chơi phong phú và chất lượng cao sẽ đảm bảo cho bạn kinh nghiệm chơi game tuyệt vời hơn. Hãy cẩn thận khi lựa chọn một cổng game để chơi sòng bạc trực tuyến ở Việt Nam và chắc chắn rằng bạn chọn một trang web uy tín và an toàn.
Tìm Kiếm Cổng Game Uy Tín Nhất Hiện Nay Để Chơi Sòng Bạc Trực Tuyến – NHẬP NGAY! tại Vé Duyên, một trang web đáng tin cậy với nhiều trò chơi online hấp dẫn.
Theo đánh giá của tôi, trang web này rất tốt và tiện dụng. Tôi có thể chơi bất cứ trò chơi nào mình muốn một cách dễ dàng và nhanh chóng. Hỗ trợ trực tuyến cũng rất tốt, tôi đã nhận được trả lời nhanh chóng khi có bất cứ câu hỏi parimatch login nào. Tôi rất hào hứng để tiếp tục chơi tại đây!
– Hồ Văn Thù, 28 tuổi
Tìm Kiếm Cổng Game Uy Tín Nhất Hiện Nay Để Chơi Sòng Bạc Trực Tuyến – NHẬP NGAY! tại VegasPlus, một trang web tuyệt vời với nhiều ưu đãi và chương trình khuyến mại hấp dẫn.
Tôi rất thích trang web này vì nó cung cấp nhiều trò chơi hấp dẫn với các chức năng tuyệt vời. Tôi cũng rất hào hứng vì các chương trình khuyến mại hấp dẫn và ưu đãi tốt cho thành viên mới. Hỗ trợ trực tuyến cũng rất tốt, tôi đã nhận được trả lời nhanh chóng khi có bất cứ câu hỏi nào. Tôi rất hào hứng để tiếp tục chơi tại đây!
– Trần Thanh Tùng, 31 tuổi
Tìm kiếm cổng game uy tín nhất hiện nay để chơi sòng bạc trực tuyến không phải lúc nào cũng dễ dàng. Hãy tìm hiểu kỹ về các yếu tố quan trọng như bảo mật, chất lượng dịch vụ và chính sách trả giá trước khi chọn một cổng game.
Nếu bạn đang tìm kiếm một trung tâm casino trực tuyến uy tín, hãy xem xét các đánh giá và bình luận của người chơi trước khi đăng ký tham gia.
Đừng bao giờ quên kiểm tra xem cổng game có hoạt động trong phạm vi luật pháp của Việt Nam hay không. Điều này sẽ giúp bạn tránh trước các rủi ro về an toàn và bảo mật.